use crate::U256;

/** NIST P-256: a = p - 3 */
/// nist p256 p: 2²⁵⁶ - 2²²⁴ + 2¹⁹² + 2⁹⁶ -1
//#[allow(non_upper_case_globals)]
//
#[allow(dead_code)]
pub const NIST_P256_P: U256 = U256::new(
    0xFFFFFFFFFFFFFFFF,
    0x00000000FFFFFFFF,
    0x0000000000000000,
    0xFFFFFFFF00000001,
);
#[allow(dead_code)]
pub const NIST_P256_N: U256 = U256::new(
    0xF3B9CAC2FC632551,
    0xBCE6FAADA7179E84,
    0xFFFFFFFFFFFFFFFF,
    0xFFFFFFFF00000000,
);
#[allow(dead_code)]
const NIST_P256_A: U256 = U256::new(
    0xFFFFFFFFFFFFFFFC,
    0x00000000FFFFFFFF,
    0x0000000000000000,
    0xFFFFFFFF00000001,
);
#[allow(dead_code)]
const NIST_P256_B: U256 = U256::new(
    0x3BCE3C3E27D2604B,
    0x651D06B0CC53B0F6,
    0xB3EBBD55769886BC,
    0x5AC635D8AA3A93E7,
);
#[allow(dead_code)]
pub const NIST_P256_GX: U256 = U256::new(
    0xF4A13945D898C296,
    0x77037D812DEB33A0,
    0xF8BCE6E563A440F2,
    0x6B17D1F2E12C4247,
);
#[allow(dead_code)]
pub const NIST_P256_GY: U256 = U256::new(
    0xCBB6406837BF51F5,
    0x2BCE33576B315ECE,
    0x8EE7EB4A7C0F9E16,
    0x4FE342E2FE1A7F9B,
);

/** GM/T 0003.5-2012 SM2: a = p - 3 */
/** prime following mu for Barrett's reduction */
/// SM2 p: 2^256 - 2^224 - 2^96 + 2^64 -1
/// SM2 p: 2²⁵⁶ - 2²²⁴ - 2⁹⁶ + 2⁶⁴ -1
pub const SM2_P: U256 = U256::new(
    0xFFFFFFFFFFFFFFFF,
    0xffffffff00000000,
    0xffffffffffffffff,
    0xfffffffeffffffff,
);
pub const SM2_N: U256 = U256::new(
    0x53bbf40939d54123,
    0x7203df6b21c6052b,
    0xFFFFFFFFFFFFFFFF,
    0xfffffffeffffffff,
);
pub const SM2_A: U256 = U256::new(
    0xFFFFFFFFFFFFFFFC,
    0xffffffff00000000,
    0xffffffffffffffff,
    0xfffffffeffffffff,
);
pub const SM2_B: U256 = U256::new(
    0xDDBCBD414D940E93,
    0xF39789F515AB8F92,
    0x4D5A9E4BCF6509A7,
    0x28E9FA9E9D9F5E34,
);
pub const SM2_GX: U256 = U256::new(
    0x715A4589334C74C7,
    0x8FE30BBFF2660BE1,
    0x5F9904466A39C994,
    0x32C4AE2C1F198119,
);
pub const SM2_GY: U256 = U256::new(
    0x2DF32E52139F0A0,
    0xD0A9877CC62A4740,
    0x59BDCEE36B692153,
    0xBC3736A2F4F6779C,
);
pub const SM2_P_RR: U256 = U256::new(0x200000003, 0x2ffffffff, 0x100000001, 0x400000002);
pub const SM2_N_RR: U256 = U256::new(
    0x901192AF7C114F20,
    0x3464504ADE6FA2FA,
    0x620FC84C3AFFE0D4,
    0x1EB5E412A22B3D3B,
);
pub const SM2_P_K0: u64 = 1;
pub const SM2_N_K0: u64 = 0x327f9e8872350975;

#[allow(dead_code)]
const SECP256K1_P: U256 = U256::new(
    0xFFFFFFFEFFFFFC2F,
    0xFFFFFFFFFFFFFFFF,
    0xffffffffffffffff,
    0xFFFFFFFFFFFFFFFF,
);
#[allow(dead_code)]
const SECP256K1_N: U256 = U256::new(
    0xbfd25e8cd0364141,
    0xbaaedce6af48a03b,
    0xFFFFFFFFFFFFFFFE,
    0xffffffffffffffff,
);
#[allow(dead_code)]
const SECP256K1_A: U256 = U256::new(0, 0, 0, 0);
#[allow(dead_code)]
const SECP256K1_B: U256 = U256::new(7, 0, 0, 0);
#[allow(dead_code)]
const SECP256K1_GX: U256 = U256::new(
    0x59F2815B16F81798,
    0x29BFCDB2DCE28D9,
    0x55A06295CE870B07,
    0x79BE667EF9DCBBAC,
);
#[allow(dead_code)]
const SECP256K1_GY: U256 = U256::new(
    0x9C47D08FFB10D4B8,
    0xFD17B448A6855419,
    0x5DA4FBFC0E1108A8,
    0x483ADA7726A3C465,
);
#[allow(dead_code)]
const SECP256K1_P_RR: U256 = U256::new(0x7a2000e90a1, 1, 0, 0);
#[allow(dead_code)]
const SECP256K1_N_RR: U256 = U256::new(
    0x896CF21467D7D140,
    0x741496C20E7CF878,
    0xE697F5E45BCD07C6,
    0x9D671CD581C69BC5,
);
#[allow(dead_code)]
const SECP256K1_P_K0: u64 = 0xd838091dd2253531;
#[allow(dead_code)]
const SECP256K1_N_K0: u64 = 0x4b0dff665588b13f;
